package org.csu.mypetstore.persistence;

import org.csu.mypetstore.domain.Category;
import org.csu.mypetstore.domain.Item;
import org.csu.mypetstore.domain.Product;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.support.SessionStatus;

import java.util.List;
import java.util.Map;

@Repository
public interface ItemMapper {
    //操作大类
    List<Category> selectAllCategory();
    //注意：这里使用模糊查询，输入的keyword需要："%"+keyword+"%"  进行拼接
    //如果再mybatis的数据库语句中拼接会有SQL注入问题，故输入串时拼接
    List<Category> selectCategoryByName(String keyword);
    void insertCategory(String categoryId, String name, String description);
    void deleteCategoryByCategoryId(String categoryId);
    //更新大类信息，第一个方法失败了，搞不定！一个思路：根据大类，信息，修改新插入一个category，插入后，搜索原product表，改catid，然后删除category
//    void updateCategoryByCategoryId(String updateCategoryId,String categoryId, String name, String description);
    void updateCategoryByCategoryId(String categoryId, String name, String description);


    //操作具体物种
    List<Product> selectAllProduct();
    //注意：这里使用模糊查询，输入的keyword需要："%"+keyword+"%"  进行拼接
    //如果再mybatis的数据库语句中拼接会有SQL注入问题，故输入串时拼接
    List<Product> selectProductByName(String keyword);
    void insertProduct(String productId, String category, String name, String description);
    void deleteProductByProductId(String productId);
    //更新产品信息
//    void updateProductByProductId(String updateProductId,String productId, String category, String name, String description);
    void updateProductByProductId(String productId, String name, String description);


    //操作具体商品
    List<Item> selectAllItem();
    int selectInventoryByItemId(String itemId);
    //注意：这里使用模糊查询，输入的productId或itemId需要："%"+keyword+"%"  进行拼接
    //如果再mybatis的数据库语句中拼接会有SQL注入问题，故输入串时拼接
    List<Item> selectItemByItemId(String itemId);
    List<Item> selectItemByProductId(String productId);
    List<Item> selectItemByItemIdAndProductId(String itemId,String productId);
    //添加新的item和item的库存
    void insertItem(Item item);
    void insertItemInventory(Item item);
    void deleteItemByItemId(String itemId);
    void deleteInventoryItemId(String itemId);
    //更新商品信息
//    void updateItemByItemId(String updateItemId,Item item);
//    void updateInventoryByItemId(String updateItemId,String itemId,int qty);
    void updateItemByItemId(Item item);
    void updateInventoryByItemId(String itemId,int qty);

    //用在订单里的方法，温宇辉
    void updateInventoryQuantity(Map<String, Object> param);

    Item getItem(String itemId);

    int getInventoryQuantity(String itemId);

}
